<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>宏任务和微任务</title>
</head>
<body>
<script>
   //   JS中用来存储待执行回调函数的队列中包含了两个特定的队列
   //   宏队列：用来保存执行的宏任务(回调)，比如：定时器、DOM事件操作、ajax微队列：用来保存执行的微任务(回调)，比如：promise
   //   JS执行的时候会区分两个队列
   //       -首先JS引擎会必须先将所有的同步代码都执行完
   //       - 每次准备取出第一个宏任务的执行之前，都需要将所有的微任务一个一个取出来执行
   //       -顺序为:同-微-宏 (同步代码-异步代码的微任务-异步代码的宏任务)

    //同：222 4444
    //微：333
    //宏：111
   setTimeout(()=>{ // 宏任务
       console.log(111)
   })
   new Promise((resolve, reject) => {
       resolve()
       console.log(222)// 同步代码
   }).then(value => {
       console.log(333)//微任务
   })
   console.log(444)//同步代码

</script>
</body>
</html>